/**
 * 认证相关API类型定义
 */

declare namespace Api {
  namespace Auth {
    /** 登录请求参数 */
    interface LoginParams {
      /** 用户名 */
      username: string;
      /** 密码 */
      password: string;
      /** 验证码 */
      code?: string;
      /** 验证码唯一标识 */
      uuid?: string;
      /** 记住我 */
      rememberMe?: boolean;
    }

    /** 登录响应数据 */
    interface LoginResponse {
      /** 访问令牌 */
      access_token?: string;
      /** 令牌 */
      token?: string;
      /** 刷新令牌 */
      refresh_token?: string;
      /** 令牌类型 */
      token_type?: string;
      /** 过期时间(秒) */
      expires_in?: number;
      /** 用户信息 */
      user?: UserInfo;
    }

    /** 验证码响应数据 */
    interface CaptchaResponse {
      /** 验证码图片base64 */
      img: string;
      /** 验证码唯一标识 */
      uuid: string;
      /** 是否启用验证码 */
      captchaEnabled: boolean;
    }

    /** 用户信息 */
    interface UserInfo {
      /** 用户ID */
      userId: number;
      /** 用户名 */
      username: string;
      /** 昵称 */
      nickName: string;
      /** 邮箱 */
      email?: string;
      /** 手机号 */
      phonenumber?: string;
      /** 性别 */
      sex?: string;
      /** 头像 */
      avatar?: string;
      /** 部门ID */
      deptId?: number;
      /** 部门名称 */
      deptName?: string;
      /** 角色列表 */
      roles?: string[];
      /** 权限列表 */
      permissions?: string[];
    }

    /** 刷新令牌请求参数 */
    interface RefreshTokenParams {
      /** 刷新令牌 */
      refresh_token: string;
    }

    /** 修改密码请求参数 */
    interface ChangePasswordParams {
      /** 旧密码 */
      oldPassword: string;
      /** 新密码 */
      newPassword: string;
      /** 确认密码 */
      confirmPassword: string;
    }

    /** 注册请求参数 */
    interface RegisterParams {
      /** 用户名 */
      username: string;
      /** 密码 */
      password: string;
      /** 确认密码 */
      confirmPassword: string;
      /** 邮箱 */
      email?: string;
      /** 手机号 */
      phonenumber?: string;
      /** 验证码 */
      code?: string;
      /** 验证码唯一标识 */
      uuid?: string;
    }

    /** 忘记密码请求参数 */
    interface ForgotPasswordParams {
      /** 用户名或邮箱 */
      username: string;
      /** 验证码 */
      code?: string;
      /** 验证码唯一标识 */
      uuid?: string;
    }

    /** 重置密码请求参数 */
    interface ResetPasswordParams {
      /** 重置令牌 */
      token: string;
      /** 新密码 */
      password: string;
      /** 确认密码 */
      confirmPassword: string;
    }
  }

  namespace User {
    /** 用户信息（扩展版本） */
    interface UserInfo extends Auth.UserInfo {
      /** 创建时间 */
      createTime?: string;
      /** 更新时间 */
      updateTime?: string;
      /** 最后登录时间 */
      loginDate?: string;
      /** 最后登录IP */
      loginIp?: string;
      /** 状态 */
      status?: string;
      /** 删除标志 */
      delFlag?: string;
      /** 备注 */
      remark?: string;
    }

    /** 用户列表查询参数 */
    interface UserQueryParams {
      /** 用户名 */
      username?: string;
      /** 昵称 */
      nickName?: string;
      /** 邮箱 */
      email?: string;
      /** 手机号 */
      phonenumber?: string;
      /** 状态 */
      status?: string;
      /** 部门ID */
      deptId?: number;
      /** 创建时间范围 */
      createTimeRange?: string[];
    }

    /** 用户创建参数 */
    interface UserCreateParams {
      /** 用户名 */
      username: string;
      /** 昵称 */
      nickName: string;
      /** 密码 */
      password: string;
      /** 邮箱 */
      email?: string;
      /** 手机号 */
      phonenumber?: string;
      /** 性别 */
      sex?: string;
      /** 部门ID */
      deptId?: number;
      /** 角色ID列表 */
      roleIds?: number[];
      /** 状态 */
      status?: string;
      /** 备注 */
      remark?: string;
    }

    /** 用户更新参数 */
    interface UserUpdateParams extends Partial<UserCreateParams> {
      /** 用户ID */
      userId: number;
    }
  }
}

export {};
